【SQL】初学者がハマって「あぁそんなことか」と思うミスまとめ
大晦日ですね。アプリの運用を中心に担当しているkobayashiです。正直こんな初歩的な内容をDevelopers.IOで書いていいのかと迷ったのですが、恥をしのんでまとめておきたいと思い書きます。
非エンジニア枠でクラスメソッドに入社してまさか自分がSQLを勉強することになるとは...という状況で勉強し始めたSQLですが、エンジニアに聞くのも申し訳ないようなミスを沢山しました。多分勉強し始めたばかりの人は「こんなこと聞いていいのかな」「あぁこんな初歩的なミスで相談して時間とって申し訳ない」と思うことも多いでしょう。エラーが出ましたとエンジニアに聞く前に、このあたりのミスをやっていないかチェックしておくと良いんじゃないかと思います。
SQLで初めてプログラミングにチャレンジする方向けです。他のプログラミング言語を勉強してからSQLを勉強する方はおそらく困らない内容だと思うので、こういうことでつまずく人もいるよねたしかに...という気持ちで読んで頂ければと思います。
スペルミスがある
SQLを勉強しはじめて、「よし!コピペじゃなくて自分で書いてみよう!」と思った時にやりがちです。group byがgruop byになっているなど。長いものだと気づきにくいので、私はGROUP BYなどのキーワード(予約語)を大文字で書くようにしています。大文字と小文字はツールの違いなど色々考え方があると思うので、勉強している本や教わっている人に合わせましょう。
元からあるSQLを加工する場合には、加工している間に自分が書いた部分と元から書いてあった部分がわからなくなるので、diffツール(2つのテキストを並べて違う場所を指摘してくれる)を使うようにしています。
全角スペースが入っている
全角スペースが入っても実行できる環境はあるようですが、入れないものとして考えておいた方がいいです。これは目視で気づきにくいので、一度書いたSQLをテキストツールなどにコピーしてから、全角スペースを半角スペースに置換しましょう。
; がない
複数のSQL文を続けて書くようになった時にやりがちです。複数のSQL文を続けて書く場合は、「 ; (セミコロン)」をつけることで、文の区切りを明記できます。単一のSQL文では無くても動くことがありますが、「 ; (セミコロン)」が無いとエラーになる場合があります。
データベースの接続先を間違えている
複数のデータベースに接続するようになった時にやったミスです。そのデータベースに無いテーブルからデータを出してくれと言っても出てくるわけはないので、接続先が正しいか確認しましょう。私はなるべく色々なデータベースを行き来しないですむように、同じデータベースへのSQLはまとめて実行するようにしています。
SQLのルールに沿っていない
人が書いたSQLを加工して使っていた時にやっていたミスです。例えば、ORDER BYは、指定したカラムの値を元にSQLの実行結果を並べ替えるキーワードです。当然ながらORDER BYで指定した値はSELCTで検索した値に同じキーワードがないと並べかえようがないのですが、SQLの一部だけ変更しているとORDER BYの値を変更し忘れるということがありました。
ルールに沿っているか沿っていないかはSQLの構文を理解しないとわからないので、手元に一冊SQL初学者用の本を置いてエラーが出たSQLで使っている構文を調べるようにすると良いです。ネットで調べるのも良いのですが、私はiPadに『スッキリわかる SQL入門』という本をダウンロードして辞書的に使っていました。
さいごに
なるべく環境やツールに依存せず、初学者がミスしそうな内容をまとめてみました。はじめは、こういう初歩的なことでつまずいてしまい、ネットで調べても答えがわからず時間がただ過ぎていく...ということになりがちです。セルフチェックや後輩指導の助けになればと思います。ではでは良いお年を!